package dto

import (
	"time"
)

// VideoListRequest 视频列表请求
// 用于获取视频列表的API请求参数
// 支持分页和筛选功能
// swagger:model VideoListRequest

type VideoListRequest struct {
	// 返回的视频数量，默认为5，最大为20
	// example: 5
	Count int `json:"count" form:"count" binding:"omitempty,max=20,min=1"`
}

// VideoResponse 单个视频响应
// 包含视频的完整信息，用于返回给前端
// swagger:model VideoResponse
type VideoResponse struct {
	// 视频文件名
	// example: "movie_2024.mp4"
	Name string `json:"name"`

	// 视频文件的完整访问URL
	// example: "http://localhost:8080/videos/movie_2024.mp4"
	URL string `json:"url"`

	// 文件大小（字节）
	// example: 104857600
	Size int64 `json:"size,omitempty"`

	// 文件创建时间
	// example: "2024-01-15T10:30:00Z"
	CreatedAt time.Time `json:"created_at,omitempty"`
}

// VideoListResponse 视频列表响应
// 包含多个视频的列表和总数信息
// swagger:model VideoListResponse
type VideoListResponse struct {
	// 视频列表
	Videos []VideoResponse `json:"videos"`

	// URL数组，包含所有视频的访问URL
	// example: ["http://localhost:8080/videos/video1.mp4", "http://localhost:8080/videos/video2.mp4"]
	URLs []string `json:"urls"`

	// 视频总数
	// example: 100
	Total int `json:"total"`

	// 返回的视频数量
	// example: 5
	Count int `json:"count"`
}

// ScanResult 扫描结果
// 用于记录文件扫描任务的执行结果
// swagger:model ScanResult
type ScanResult struct {
	// 扫描的文件总数
	TotalFiles int `json:"total_files"`

	// 成功处理的文件数
	ProcessedFiles int `json:"processed_files"`

	// 新增到Redis的文件数
	AddedFiles int `json:"added_files"`

	// 跳过的文件数（非视频文件或已存在）
	SkippedFiles int `json:"skipped_files"`

	// 处理失败的文件数
	FailedFiles int `json:"failed_files"`

	// 扫描耗时
	Duration time.Duration `json:"duration"`

	// 扫描开始时间
	StartTime time.Time `json:"start_time"`

	// 扫描结束时间
	EndTime time.Time `json:"end_time"`

	// 错误信息列表
	Errors []string `json:"errors,omitempty"`
}

// FileInfo 文件信息
// 用于内部传递文件元数据
// swagger:model FileInfo
type FileInfo struct {
	// 文件名
	Name string `json:"name"`

	// 完整路径
	Path string `json:"path"`

	// 文件大小
	Size int64 `json:"size"`

	// 修改时间
	ModTime time.Time `json:"mod_time"`

	// 是否为视频文件
	IsVideo bool `json:"is_video"`
}

// TaskStatus 任务状态
// 用于监控定时任务的执行状态
// swagger:model TaskStatus
type TaskStatus struct {
	// 任务ID
	TaskID string `json:"task_id"`

	// 任务状态：running, completed, failed, scheduled
	Status string `json:"status"`

	// 任务开始时间
	StartTime time.Time `json:"start_time"`

	// 上次执行时间
	LastRun time.Time `json:"last_run,omitempty"`

	// 下次执行时间
	NextRun time.Time `json:"next_run,omitempty"`

	// 执行结果摘要
	LastResult *ScanResult `json:"last_result,omitempty"`

	// 任务运行时长
	Duration time.Duration `json:"duration,omitempty"`
}

// ErrorResponse 错误响应
// 统一的错误响应格式
// swagger:model ErrorResponse
type ErrorResponse struct {
	// 错误代码
	Code int `json:"code"`

	// 错误消息
	Message string `json:"message"`

	// 错误详情
	Details string `json:"details,omitempty"`

	// 时间戳
	Timestamp time.Time `json:"timestamp"`
}

// HealthResponse 健康检查响应
// 用于系统健康状态检查
// swagger:model HealthResponse
type HealthResponse struct {
	// 系统状态
	Status string `json:"status"`

	// 版本信息
	Version string `json:"version"`

	// 启动时间
	StartTime time.Time `json:"start_time"`

	// 运行时长
	Uptime time.Duration `json:"uptime"`

	// Redis连接状态
	RedisStatus string `json:"redis_status"`

	// 磁盘空间信息
	DiskSpace DiskSpaceInfo `json:"disk_space"`
}

// DiskSpaceInfo 磁盘空间信息
type DiskSpaceInfo struct {
	// 总空间（字节）
	Total uint64 `json:"total"`

	// 可用空间（字节）
	Free uint64 `json:"free"`

	// 已用空间（字节）
	Used uint64 `json:"used"`

	// 使用率百分比
	UsagePercent float64 `json:"usage_percent"`
}
